LINQ ব্যবহার করে Complex Query Construction
LINQ (Language Integrated Query) হল একটি শক্তিশালী কৌশল যা C#, F# এবং অন্যান্য .NET ভাষায় ডেটা কোয়েরি করার জন্য ব্যবহৃত হয়। LINQ-এর মাধ্যমে আপনি ডেটাকে সহজেই query করতে পারেন, তা হতে পারে arrays, collections, databases, XML বা অন্যান্য ডেটা সোর্সের উপর। LINQ আপনাকে SQL-like syntax ব্যবহার করে কোড লেখার সুবিধা দেয়, যা ডেটা কোয়েরি করার জন্য আরও কার্যকরী এবং পাঠযোগ্য।
F# তে LINQ এর মাধ্যমে complex queries তৈরি করতে হলে আপনাকে LINQ query syntax অথবা LINQ method syntax ব্যবহার করতে হবে। এই tutorial এ আমরা F# তে LINQ ব্যবহার করে কিভাবে জটিল কোয়েরি তৈরি করতে পারি তা দেখব।
১. LINQ Query Syntax এবং Method Syntax
F# তে LINQ-এর দুটি প্রধান সিনট্যাক্স আছে:
- Query Syntax: SQL-এর মতো দেখতে হয় এবং সাধারণত
query { ... }ব্লকের ভিতরে লেখা হয়। - Method Syntax: LINQ এর জন্য built-in ফাংশনাল মেথড ব্যবহার করা হয় (যেমন
Select,Where,OrderByইত্যাদি)।
আমরা এই দুইটি সিনট্যাক্সের মাধ্যমে complex query construction দেখব।
২. LINQ Query Syntax উদাহরণ
লিনক কুয়েরি সিনট্যাক্সের মাধ্যমে filtering, projecting, sorting, এবং joining করা যায়।
উদাহরণ 1: Filter, Select and OrderBy
open System
open System.Linq
// Sample data (list of people)
type Person = { Name: string; Age: int }
let people =
[ { Name = "Alice"; Age = 28 }
{ Name = "Bob"; Age = 24 }
{ Name = "Charlie"; Age = 30 }
{ Name = "David"; Age = 35 }
{ Name = "Eva"; Age = 22 } ]
// LINQ Query Syntax for complex query construction
let query =
query {
// Filter condition (Age > 25)
let filtered = people |> Seq.filter (fun p -> p.Age > 25)
// Sort by Age
let ordered = filtered |> Seq.sortBy (fun p -> p.Age)
// Select Name and Age
for person in ordered do
select (person.Name, person.Age)
}
// Execute the query and print the results
query |> Seq.iter (fun (name, age) -> printfn "Name: %s, Age: %d" name age)ব্যাখ্যা:
- প্রথমে
Seq.filterব্যবহার করেAge > 25শর্ত দিয়ে filtering করা হয়েছে। - তারপর
Seq.sortByব্যবহার করে বয়েসের উপর ভিত্তি করে সাজানো হয়েছে। - অবশেষে
selectব্যবহার করে প্রতিটিpersonএর নাম এবং বয়স নেয়া হয়েছে। - এই কোডে LINQ query syntax ব্যবহার করা হয়েছে যা
query { ... }ব্লকের মধ্যে লেখা হয়েছে।
উদাহরণ 2: Join Query
// Sample data (orders and products)
type Order = { OrderId: int; ProductId: int; Quantity: int }
type Product = { ProductId: int; ProductName: string }
let orders =
[ { OrderId = 1; ProductId = 101; Quantity = 2 }
{ OrderId = 2; ProductId = 102; Quantity = 1 }
{ OrderId = 3; ProductId = 101; Quantity = 3 } ]
let products =
[ { ProductId = 101; ProductName = "Laptop" }
{ ProductId = 102; ProductName = "Phone" } ]
// LINQ Query Syntax for join operation
let query =
query {
for order in orders do
join product in products on (order.ProductId = product.ProductId) equals true
select (order.OrderId, product.ProductName, order.Quantity)
}
// Execute the query and print the results
query |> Seq.iter (fun (orderId, productName, quantity) ->
printfn "Order ID: %d, Product: %s, Quantity: %d" orderId productName quantity)ব্যাখ্যা:
joinব্যবহার করেordersএবংproductsলিস্টের মধ্যে ProductId এর ভিত্তিতে join করা হয়েছে।- তারপর
selectব্যবহার করে উভয় লিস্টের মান (OrderId, ProductName, Quantity) বের করা হয়েছে।
৩. LINQ Method Syntax উদাহরণ
Method Syntax হলো LINQ ফাংশনাল অপারেটরগুলির মাধ্যমে কোয়েরি লেখা। এটি আরও বেশি ফাংশনাল এবং পাঠযোগ্য।
উদাহরণ 1: Filter, Select and OrderBy using Method Syntax
open System
open System.Linq
// Sample data (list of people)
type Person = { Name: string; Age: int }
let people =
[ { Name = "Alice"; Age = 28 }
{ Name = "Bob"; Age = 24 }
{ Name = "Charlie"; Age = 30 }
{ Name = "David"; Age = 35 }
{ Name = "Eva"; Age = 22 } ]
// LINQ Method Syntax
let result =
people
|> Seq.filter (fun p -> p.Age > 25) // Filtering by age
|> Seq.sortBy (fun p -> p.Age) // Sorting by age
|> Seq.map (fun p -> p.Name, p.Age) // Selecting name and age
// Execute the query and print the results
result |> Seq.iter (fun (name, age) -> printfn "Name: %s, Age: %d" name age)ব্যাখ্যা:
Seq.filterফাংশনটি Age > 25 শর্তে ডেটা ফিল্টার করে।Seq.sortByব্যবহার করে Age এর ভিত্তিতে ডেটা সাজানো হয়।Seq.mapব্যবহার করেnameএবংageনির্বাচন করা হয়।- এই কোডে LINQ Method Syntax ব্যবহার করা হয়েছে, যেখানে ফাংশনাল অপারেটরগুলো পাইপলাইনের মাধ্যমে চেইন করা হয়েছে।
উদাহরণ 2: GroupBy using Method Syntax
// Sample data (list of people)
let people =
[ { Name = "Alice"; Age = 28 }
{ Name = "Bob"; Age = 24 }
{ Name = "Charlie"; Age = 30 }
{ Name = "David"; Age = 35 }
{ Name = "Eva"; Age = 22 } ]
// LINQ GroupBy using Method Syntax
let grouped =
people
|> Seq.groupBy (fun p -> p.Age / 10) // Group by age decade
// Print the results
grouped |> Seq.iter (fun (ageGroup, group) ->
printfn "Age Group: %d0s" ageGroup
group |> Seq.iter (fun p -> printfn " Name: %s, Age: %d" p.Name p.Age)
)ব্যাখ্যা:
Seq.groupByফাংশনটিAgeএর ভিত্তিতে grouping করে, এখানে প্রতি দশকে (age decade) grouping করা হচ্ছে।- প্রতিটি গ্রুপের জন্য
NameএবংAgeপ্রিন্ট করা হচ্ছে।
৪. Combining Query Syntax and Method Syntax
এটি একটি মিশ্রণ যা LINQ Query Syntax এবং Method Syntax এর শক্তি একত্রিত করে।
// Sample data (list of people)
let people =
[ { Name = "Alice"; Age = 28 }
{ Name = "Bob"; Age = 24 }
{ Name = "Charlie"; Age = 30 }
{ Name = "David"; Age = 35 }
{ Name = "Eva"; Age = 22 } ]
// Combine Query Syntax and Method Syntax
let query =
query {
for person in people do
where (person.Age > 25)
sortBy person.Age
select person
}
|> Seq.map (fun p -> p.Name, p.Age) // Method syntax for further processing
// Execute the query and print the results
query |> Seq.iter (fun (name, age) -> printfn "Name: %s, Age: %d" name age)ব্যাখ্যা:
- এখানে প্রথমে query syntax ব্যবহার করে
peopleএর উপরে কোয়েরি করা হয়েছে, এরপর method syntax ব্যবহার করে নাম এবং বয়স নির্বাচন করা হয়েছে।
উপসংহার
LINQ F# এবং অন্যান্য .NET ভাষায় ডেটার সাথে কাজ করার জন্য একটি শক্তিশালী এবং সোজা পদ্ধতি। Complex Queries তৈরি করতে আপনি query syntax বা method syntax ব্যবহার করতে পারেন, যা ডেটা ফিল্টার, সজ্জিতকরণ, গ্রুপিং, অথবা জয়নিং করার জন্য অত্যন্ত কার্যকরী। LINQ আপনাকে SQL এর মতো কোয়েরি লেখার সুবিধা দেয়, যা ড
েটার উপরে কার্যকরী এবং পরিষ্কার ট্রান্সফরমেশন করার জন্য ব্যবহৃত হয়।
Read more